package com.rainszj.service;

import com.rainszj.pojo.dto.QueryBlog;
import com.rainszj.pojo.po.Blog;
import com.rainszj.pojo.vo.*;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * 博客业务逻辑处理
 *
 * @author rainszj
 * 2020/3/15
 */
public interface BlogService {


    /**
     * 通过Id获取要更新的博客
     *
     * @param id
     * @return
     */
    UpdateBlog getToUpdateBlogById(Long id);

    /**
     * 多条件查询博客
     *
     * @param queryBlog
     * @return
     */
    List<BlogQueryResult> listQueryBlog(QueryBlog queryBlog);

    /**
     * 保存博客
     *
     * @param blog
     * @return
     */
    int saveBlog(Blog blog);

    /**
     * 获取所有的博客
     *
     * @return
     */
    List<BlogQueryResult> listAdminBlog();

    /**
     * 删除博客
     *
     * @param id
     * @return
     */
    int removeBlog(Long id);

    /**
     * 修改博客
     *
     * @param id
     * @param blog
     * @return
     */
    int updateBlog(Long id, UpdateBlog blog);

    /**
     * 查询首页展示的博客
     *
     * @return
     */
    List<IndexBlog> listIndexBlog();

    /**
     * 获取最新发布的博客
     *
     * @param number
     * @return
     */
    List<LatestBlog> listLatestBlog(int number);

    /**
     * 通过 id获取博客详情
     *
     * @param id
     * @return
     */
    DetailedBlog getDetailedBlogById(Long id);

    /**
     * 根据 分类Id查询发布的博客
     *
     * @param id
     * @return
     */
    List<IndexBlog> getIndexBlogByTypeId(Long id);

    /**
     * 通过标签 Id 查询要显示的博客卡片
     *
     * @param tagId
     * @return
     */
    List<IndexBlog> getIndexBlogByTagId(@Param("tagId") Long tagId);


    /**
     * 通过 匹配字符串进行查询
     *
     * @param queryStr
     * @return
     */
    List<IndexBlog> queryBlogByString(String queryStr);

    /**
     * 根据 Id 查询 Blog
     *
     * @param blogId
     * @return
     */
    Blog queryBlogById(@Param("blogId") Long blogId);


    /**
     * 博客归档
     *
     * @return
     */
    Map<String, List<ArchiveBlog>> archive();

    /**
     * 查询博所有发布博客的数量
     *
     * @return
     */
    int countBlog();

}
